.TH std::variant::~variant 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::variant::~variant \- std::variant::~variant

.SH Synopsis
   ~variant();            \fI(since C++17)\fP
                          \fI(until C++20)\fP
   constexpr ~variant();  \fI(since C++20)\fP

   If valueless_by_exception() is true, does nothing. Otherwise, destroys the currently
   contained value.

   This destructor is trivial if std::is_trivially_destructible_v<T_i> is true for all
   T_i in Types....

.SH Example


// Run this code

 #include <variant>
 #include <cstdio>

 int main()
 {
     struct X { ~X() { puts("X::~X();"); } };
     struct Y { ~Y() { puts("Y::~Y();"); } };

     {
         puts("entering block #1");
         std::variant<X,Y> var;
         puts("leaving block #1");
     }

     {
         puts("entering block #2");
         std::variant<X,Y> var{ std::in_place_index_t<1>{} }; // constructs var(Y)
         puts("leaving block #2");
     }
 }

.SH Output:

 entering block #1
 leaving block #1
 X::~X();
 entering block #2
 leaving block #2
 Y::~Y();

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

     DR    Applied to              Behavior as published               Correct behavior
                      the destructor was not constexpr while
   P2231R1 C++20      non-trivial destructors can be constexpr in      made constexpr
                      C++20
